/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.trandio.dao;

import org.trandio.model.PlanoANVO;
import org.trandio.model.PlanoAMVO;
import org.trandio.model.PlanoACVO;
import org.trandio.model.PlanoAHVO;
import org.trandio.model.PlanoATVO;
import org.trandio.model.PlanoAPVO;
import org.trandio.model.PlanoUSVO;
import org.trandio.model.PlanoAUVO;
import org.trandio.model.PlanoAFVO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.NamingException;
import org.trandio.util.ConexionDb;

/**
 *
 * @author root
 */
public class GenerarRipsDAO implements GenerarRipsInterface {

    public String getSql(int caso, int idsede, int identidad, int idcontrato, String factura) {
        String sql = "";

        switch (caso) {

            case 1:
                sql = "and tb_factura.id_sede=" + idsede;
                break;
            case 2:
                sql = "and tb_factura.id_entidad=" + identidad;
                break;
            case 3:
                sql = "and tb_factura.numero='" + factura + "'";
                break;
            case 4:
                sql = "and tb_factura.id_entidad=" + identidad + " and tb_factura.id_contrato=" + idcontrato;
                break;
            case 5:
                sql = "and tb_factura.id_sede=" + idsede + " and tb_factura.id_entidad=" + identidad;
                break;
            case 6:
                sql = "and tb_factura.id_sede=" + idsede + " and tb_factura.id_entidad=" + identidad + " and tb_factura.id_contrato=" + idcontrato;
                break;
        }

        return sql;
    }

    @Override
    public List<PlanoAFVO> generarPlanoTransaccion(int caso, int idsede, int identidad, int idcontrato, String factura, String fecini, String fecfin) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();
        String sqlAdi = "";
        String condicion = "";

        sqlAdi = getSql(caso, idsede, identidad, idcontrato, factura);



        //condicion = " where tb_factura.fecha between '"+fecini+"' AND '"+fecfin+"' AND tb_factura.id_entidad="+identidad;
        condicion = " where tb_factura.fecha between '" + fecini + "' AND '" + fecfin + "' " + sqlAdi;

        List<PlanoAFVO> listaPlanoAT = new ArrayList<PlanoAFVO>();
        String sql = "SELECT "
                + " tb_sede.codigo_prestador codigo, "
                + " tb_prestador.razon_social, "
                + " tb_tipoidentificacion.codigo tipoide, "
                + " tb_prestador.nit, "
                + " tb_factura.id, "
                + " tb_factura.numero numfact, "
                + " to_char(tb_factura.fecha, 'dd/mm/yyyy') fecha, "
                + " tb_entidad.cod_entidad, "
                + " tb_entidad.descripcion, "
                + " tb_contrato.numero, "
                + " CAST(tb_factura.valor_copago AS integer), "
                + " CAST(tb_factura.valor AS integer) "
                + " FROM tb_factura "
                + " inner join tb_sede on (tb_factura.id_sede = tb_sede.id) "
                + " inner join tb_prestador on (tb_prestador.id = tb_sede.id_prestador) "
                + " inner join tb_tipoidentificacion on (tb_prestador.id_tipoidentificacion = tb_tipoidentificacion.id) "
                + " inner join tb_entidad on (tb_factura.id_entidad = tb_entidad.id_entidad) "
                + " inner join tb_contrato on (tb_factura.id_contrato = tb_contrato.id)" + condicion;

        System.out.println("lista AF: " + sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    PlanoAFVO planoATVO = new PlanoAFVO();
                    planoATVO.setCodPrestador(res.getString("codigo"));
                    planoATVO.setNomPrestador(res.getString("razon_social"));
                    planoATVO.setTipoIde(res.getString("tipoide"));
                    planoATVO.setNumeroIde(res.getString("nit"));
                    planoATVO.setNumeroFactura(res.getString("numfact"));
                    planoATVO.setFechaFactura(res.getString("fecha"));
                    planoATVO.setCodEntidad(res.getString("cod_entidad"));
                    planoATVO.setNomEntidad(res.getString("descripcion"));
                    planoATVO.setNumContrato(res.getString("numero"));
                    planoATVO.setVrCopago(res.getString("valor_copago"));
                    planoATVO.setVrTotal(res.getString("valor"));
                    planoATVO.setIdFactura(res.getInt("id"));

                    listaPlanoAT.add(planoATVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }

        return listaPlanoAT;
    }

    @Override
    public double sumarDetalles(int idFactura) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();
        double suma = 0;

        String sql = "SELECT SUM(tb_detalle_factura.valor_total) FROM tb_detalle_factura WHERE tb_detalle_factura.id_factura=" + idFactura;

        PreparedStatement stmt = conn.prepareStatement(sql);

        try {
            ResultSet res = stmt.executeQuery();
            try {
                if (res.next()) {
                    suma = res.getInt(1);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }

        return suma;
    }

    @Override
    public double copagoDetalles(int idFactura) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();
        double suma = 0;

        String sql = "SELECT SUM(tb_detalle_factura.valor_copago) FROM tb_detalle_factura WHERE tb_detalle_factura.id_factura=" + idFactura;

        PreparedStatement stmt = conn.prepareStatement(sql);

        try {
            ResultSet res = stmt.executeQuery();
            try {
                if (res.next()) {
                    suma = res.getInt(1);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }

        return suma;
    }

    @Override
    public List<PlanoUSVO> generarPlanoUsuarios(int caso, int idsede, int identidad, int idcontrato, String factura, String fecini, String fecfin) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();
        String sqlAdi = "";
        String condicion = "";

        sqlAdi = getSql(caso, idsede, identidad, idcontrato, factura);

        condicion = " where tb_factura.fecha between '" + fecini + "' AND '" + fecfin + "' " + sqlAdi;

        List<PlanoUSVO> listaPlanoUS = new ArrayList<PlanoUSVO>();
        String sql = " SELECT DISTINCT "
                + " tb_tipoidentificacion.codigo tipoide, "
                + " tb_paciente.numero_identificacion, "
                + " tb_entidad.cod_entidad, "
                + " tb_tipopaciente.id tipousr, "
                + " tb_paciente.apellido1, "
                + " tb_paciente.apellido2, "
                + " tb_paciente.nombre1, "
                + " tb_paciente.nombre2, "
                + " tb_paciente.edad, "
                + " tb_paciente.medida_edad, "
                + " tb_sexo.codigo sexo, "
                + " tb_departamento.codigo depto, "
                + " tb_municipio.codigo mupio, "
                + " tb_zona.codigo zona "
                + " FROM "
                + " tb_paciente "
                + " inner join tb_tipopaciente on (tb_paciente.id_tipopaciente = tb_tipopaciente.id) "
                + " inner join tb_tipoidentificacion on (tb_paciente.id_tipo_identificacion = tb_tipoidentificacion.id) "
                + " inner join tb_sexo on (tb_paciente.id_sexo = tb_sexo.id) "
                + " inner join tb_departamento on (tb_paciente.id_departamento = tb_departamento.id) "
                + " inner join tb_municipio on (tb_paciente.id_municipio = tb_municipio.id) "
                + " inner join tb_zona on (tb_paciente.zona = tb_zona.id) "
                + " inner join tb_factura on (tb_factura.id_paciente = tb_paciente.id) "
                + " inner join tb_entidad on (tb_factura.id_entidad = tb_entidad.id_entidad) " + condicion;

        System.out.println("lista AT: " + sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    PlanoUSVO planoUSVO = new PlanoUSVO();
                    planoUSVO.setTipoIde(res.getString("tipoide"));
                    planoUSVO.setNumIde(res.getString("numero_identificacion"));
                    planoUSVO.setCodEntidad(res.getString("cod_entidad"));
                    planoUSVO.setTipoUsuario(res.getInt("tipousr"));
                    planoUSVO.setApe1(res.getString("apellido1"));
                    planoUSVO.setApe2(res.getString("apellido2"));
                    planoUSVO.setNom1(res.getString("nombre1"));
                    planoUSVO.setNom2(res.getString("nombre2"));
                    planoUSVO.setEdad(res.getInt("edad"));
                    planoUSVO.setMedidaEdad(res.getInt("medida_edad"));
                    planoUSVO.setSexo(res.getString("sexo"));
                    planoUSVO.setCodDepto(res.getString("depto"));
                    planoUSVO.setCodMupio(res.getString("mupio"));
                    planoUSVO.setCodZona(res.getString("zona"));
                    listaPlanoUS.add(planoUSVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }

        return listaPlanoUS;

    }

    @Override
    public List<PlanoACVO> generarPlanoConsultas(int caso, int idsede, int identidad, int idcontrato, String factura, String fecini, String fecfin) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sqlAdi = "";
        String condicion = "";

        sqlAdi = getSql(caso, idsede, identidad, idcontrato, factura);

        condicion = " where tb_factura.fecha between '" + fecini + "' AND '" + fecfin + "' " + sqlAdi;

        List<PlanoACVO> listaPlanoAC = new ArrayList<PlanoACVO>();

        String sql = "SELECT "
                + " tb_factura.numero, "
                + " tb_sede.codigo_prestador, "
                + " tb_tipoidentificacion.codigo tipoide, "
                + " tb_paciente.numero_identificacion, "
                + " to_char(tb_ripsac.fecha, 'dd/mm/yyyy') fecha, "
                + " tb_ripsac.numero_orden, "
                + " tb_actividad.codigo codigo_actividad, "
                + " tb_finalidadcn.codigo finalidad, "
                + " tb_causa_externa.codigo causaex, "
                + " tb_ripsac.coddx_pal, "
                + " tb_ripsac.coddx_rel1, "
                + " tb_ripsac.coddx_rel2, "
                + " tb_ripsac.coddx_rel3, "
                + " tb_tipodx.id tipodxId, "
                + " tb_tipodx.codigo tipodx, "                
                + " tb_ripsac.valor, "
                + " tb_ripsac.valor_copago, "
                + " tb_ripsac.valor_total, "
                + " tb_paciente.id_entidad "
                + " FROM "
                + " tb_ripsac "
                + " inner join tb_factura on (tb_ripsac.id_factura = tb_factura.id) "
                + " inner join tb_sede on (tb_factura.id_sede = tb_sede.id) "
                + " inner join tb_actividad on (tb_ripsac.id_actividad = tb_actividad.id) "
                + " inner join tb_paciente on (tb_ripsac.id_paciente = tb_paciente.id) "
                + " inner join tb_tipoidentificacion on (tb_paciente.id_tipo_identificacion = tb_tipoidentificacion.id) "
                + " inner join tb_finalidadcn on (tb_ripsac.id_finalidad = tb_finalidadcn.id) "
                + " inner join tb_causa_externa on (tb_ripsac.id_causaex = tb_causa_externa.id) "
                + " inner join tb_tipodx on (tb_ripsac.id_tipodx = tb_tipodx.id) " + condicion;

        System.out.println("lista AC: " + sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    PlanoACVO planoACVO = new PlanoACVO();
                    planoACVO.setTipoIde(res.getString("tipoide"));
                    planoACVO.setNumIde(res.getString("numero_identificacion"));
                    planoACVO.setNumFactura(res.getString("numero"));
                    planoACVO.setCodPrestador(res.getString("codigo_prestador"));
                    planoACVO.setFecha(res.getString("fecha"));
                    planoACVO.setNumOrden(res.getString("numero_orden"));
                    planoACVO.setCodActividad(res.getString("codigo_actividad"));
                    planoACVO.setFinalidad(res.getString("finalidad"));
                    planoACVO.setCausaExterna(res.getString("causaex"));
                    planoACVO.setDxPal(res.getString("coddx_pal"));
                    planoACVO.setDxRel1(res.getString("coddx_rel1"));
                    planoACVO.setDxRel2(res.getString("coddx_rel2"));
                    planoACVO.setDxRel3(res.getString("coddx_rel3"));
                    planoACVO.setTipoDxId(res.getString("tipodxId"));
                    //planoACVO.setTipoDx(res.getString("tipodx"));
                    planoACVO.setVrConsulta(res.getString("valor"));
                    planoACVO.setVrCoutaMod(res.getString("valor_copago"));
                    planoACVO.setVrNeto(res.getString("valor_total"));
                    listaPlanoAC.add(planoACVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }

        return listaPlanoAC;
    }

    @Override
    public List<PlanoAPVO> generarPlanoProcedimientos(int caso, int idsede, int identidad, int idcontrato, String factura, String fecini, String fecfin) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sqlAdi = "";
        String condicion = "";

        sqlAdi = getSql(caso, idsede, identidad, idcontrato, factura);

        condicion = " where tb_factura.fecha between '" + fecini + "' AND '" + fecfin + "' " + sqlAdi;
        List<PlanoAPVO> listaPlanoAP = new ArrayList<PlanoAPVO>();

        String sql = "SELECT "
                + "tb_factura.numero, "
                + "tb_sede.codigo_prestador, "
                + "tb_tipoidentificacion.codigo tipoide, "
                + "tb_paciente.numero_identificacion, "
                + "to_char(tb_ripsap.fecha, 'dd/mm/yyyy') fecha, "
                + "tb_ripsap.numero_orden, "
                + "tb_actividad.codigo codigo_actividad, "
                + "tb_ambitopx.codigo ambito, "
                + "tb_finalidadpx.id finalidad, "
                + "tb_personalatiende.id peratiende, "
                + "tb_ripsap.coddx_pal, "
                + "tb_ripsap.coddx_rel, "
                + "tb_ripsap.coddx_complicacion, "
                + "tb_formaqx.codigo formaactoqx, "
                + "tb_ripsap.valor "
                + "FROM "
                + "tb_ripsap "
                + "inner join tb_factura on (tb_ripsap.id_factura = tb_factura.id) "
                + "inner join tb_sede on (tb_factura.id_sede = tb_sede.id) "
                + "inner join tb_actividad on (tb_ripsap.id_actividad = tb_actividad.id) "
                + "left join  tb_formaqx on (tb_ripsap.id_formaactoqx = tb_formaqx.id) "
                + "inner join tb_paciente on (tb_ripsap.id_paciente = tb_paciente.id) "
                + "inner join tb_tipoidentificacion on ( tb_paciente.id_tipo_identificacion = tb_tipoidentificacion.id) "
                + "inner join tb_ambitopx on (tb_ripsap.id_ambitopx = tb_ambitopx.id) "
                + "inner join tb_finalidadpx on (tb_ripsap.id_finalidad = tb_finalidadpx.id) "
                + "inner join tb_personalatiende on (tb_ripsap.id_personalatiende = tb_personalatiende.id) " + condicion;

        System.out.println("lista AP: " + sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    PlanoAPVO planoAPVO = new PlanoAPVO();
                    planoAPVO.setTipoIde(res.getString("tipoide"));
                    planoAPVO.setNumIde(res.getString("numero_identificacion"));
                    planoAPVO.setNumFactura(res.getString("numero"));
                    planoAPVO.setCodPrestador(res.getString("codigo_prestador"));
                    planoAPVO.setFecha(res.getString("fecha"));
                    planoAPVO.setNumOrden(res.getString("numero_orden"));
                    planoAPVO.setCodActividad(res.getString("codigo_actividad"));
                    planoAPVO.setFinalidad(res.getString("finalidad"));
                    planoAPVO.setAmbito(res.getString("ambito"));
                    planoAPVO.setDxPal(res.getString("coddx_pal"));
                    planoAPVO.setDxRel1(res.getString("coddx_rel"));
                    planoAPVO.setPeratiende(res.getString("peratiende"));
                    planoAPVO.setDxComplic(res.getString("coddx_complicacion"));
                    planoAPVO.setFormaActoQx(res.getString("formaactoqx"));
                    planoAPVO.setVrProc(res.getString("valor"));
                    listaPlanoAP.add(planoAPVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }

        return listaPlanoAP;
    }

    @Override
    public List<PlanoAUVO> generarPlanoUrgencias(int caso, int idsede, int identidad, int idcontrato, String factura, String fecini, String fecfin) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sqlAdi = "";
        String condicion = "";
        sqlAdi = getSql(caso, idsede, identidad, idcontrato, factura);

        condicion = " where tb_factura.fecha between '" + fecini + "' AND '" + fecfin + "' " + sqlAdi;

        List<PlanoAUVO> listaPlanoAU = new ArrayList<PlanoAUVO>();

        /*
         * String sql = "SELECT "+ "tb_factura.numero,"+ "tb_prestador.codigo
         * codigo_prestador,"+ "tb_tipoidentificacion.codigo tipoide,"+
         * "tb_paciente.numero_identificacion,"+
         * "tb_ripestancia.fecha_ingreso,"+
         * "tb_ripestancia.numero_autorizacion,"+ "tb_causa_externa.codigo
         * causaex,"+ "tb_ripestancia.coddx_salida,"+
         * "tb_ripestancia.coddx_rel1,"+ "tb_ripestancia.coddx_rel2,"+
         * "tb_ripestancia.coddx_rel3,"+ "tb_destinosalida.codigo destino,"+
         * "tb_estadosalida.codigo estado,"+ "tb_ripestancia.coddx_muerte,"+
         * "tb_ripestancia.fecha_salida"+ " FROM "+ " tb_ripestancia,"+ "
         * tb_factura,"+ " tb_prestador,"+ " tb_paciente,"+ "
         * tb_tipoidentificacion,"+ " tb_causa_externa,"+ " tb_destinosalida,"+
         * " tb_estadosalida"+ " WHERE "+ "tb_ripestancia.id_factura =
         * tb_factura.id AND "+ "tb_ripestancia.id_causaexterna =
         * tb_causa_externa.id AND "+ "tb_ripestancia.id_destino =
         * tb_destinosalida.id AND "+ "tb_ripestancia.id_estadosalida =
         * tb_estadosalida.id AND "+ "tb_factura.id_prestador = tb_prestador.id
         * AND "+ "tb_factura.id_paciente = tb_paciente.id AND "+
         * "tb_paciente.id_tipo_identificacion = tb_tipoidentificacion.id" +condicion;
         */

        String sql = "SELECT "
                + " tb_factura.numero, "
                + " tb_sede.codigo_prestador, "
                + " tb_tipoidentificacion.codigo tipoide, "
                + " tb_paciente.numero_identificacion, "
                + " to_char(tb_ripsau.fecha_ingreso,'dd/mm/yyyy HH24:MI') fecha_ingreso, "
                + " tb_ripsau.numero_orden, "
                + " tb_causa_externa.codigo causaex, "
                + " tb_ripsau.dxprincipal_egr, "
                + " tb_ripsau.dxrelacionado_egr_uno, "
                + " tb_ripsau.dxrelacionado_egr_dos, "
                + " tb_ripsau.dxrelacionado_egr_tres, "
                //+ " tb_destinosalida.codigo destino, "
                + " tb_destinosalida.id destino, "
                + " tb_estadosalida.codigo estado, "
                + " tb_ripsau.dxmuerte_egr, "
                + " to_char(tb_ripsau.fecha_egr,'dd/mm/yyyy HH24:MI') fecha_egr "
                + " FROM "
                + " tb_ripsau "
                + " inner join tb_factura on (tb_ripsau.id_factura = tb_factura.id) "
                + " inner join tb_sede on (tb_factura.id_sede = tb_sede.id) "
                + " inner join tb_causa_externa on(tb_ripsau.id_causaexterna = tb_causa_externa.id) "
                + " inner join tb_destinosalida on (tb_ripsau.id_destinosalida_egr = tb_destinosalida.id) "
                + " inner join tb_estadosalida on (tb_ripsau.id_estadosalida_egr = tb_estadosalida.id) "
                + " inner join tb_paciente on(tb_ripsau.id_paciente = tb_paciente.id) "
                + " inner join tb_tipoidentificacion on (tb_paciente.id_tipo_identificacion = tb_tipoidentificacion.id) " + condicion;



        System.out.println("lista AU: " + sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    PlanoAUVO planoAUVO = new PlanoAUVO();
                    planoAUVO.setId_factura(res.getString("numero"));
                    planoAUVO.setCodPrestador(res.getString("codigo_prestador"));
                    planoAUVO.setTipoIde(res.getString("tipoide"));
                    planoAUVO.setNumIde(res.getString("numero_identificacion"));
                    String[] fecHora = res.getString("fecha_ingreso").split(" ");
                    planoAUVO.setFechaIngreso(fecHora[0]);
                    planoAUVO.setHoraIngreso(fecHora[1]);
                    planoAUVO.setNumOrden(res.getString("numero_orden"));
                    planoAUVO.setCausaEx(res.getString("causaex"));
                    planoAUVO.setDxPrinEgreso(res.getString("dxprincipal_egr"));
                    planoAUVO.setDxRelEgresoUno(res.getString("dxrelacionado_egr_uno"));
                    planoAUVO.setDxRelEgresoDos(res.getString("dxrelacionado_egr_dos"));
                    planoAUVO.setDxRelEgresoTres(res.getString("dxrelacionado_egr_tres"));
                    planoAUVO.setDestinoSalEgresoId(res.getString("destino"));
                    planoAUVO.setEstadoSalEgreso(res.getString("estado"));
                    planoAUVO.setDxMuerteEgreso(res.getString("dxmuerte_egr"));
                    String[] fecHoraSal = res.getString("fecha_egr").split(" ");
                    planoAUVO.setFechaEgreso(fecHoraSal[0]);
                    planoAUVO.setHoraEgreso(fecHoraSal[1]);
                    listaPlanoAU.add(planoAUVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }

        return listaPlanoAU;
    }

    @Override
    public List<PlanoAHVO> generarPlanoHospitalizacion(int caso, int idsede, int identidad, int idcontrato, String factura, String fecini, String fecfin) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sqlAdi = "";
        String condicion = "";

        sqlAdi = getSql(caso, idsede, identidad, idcontrato, factura);

        condicion = " where tb_factura.fecha between '" + fecini + "' AND '" + fecfin + "' " + sqlAdi;

        List<PlanoAHVO> listaPlanoAH = new ArrayList<PlanoAHVO>();

        /*
         * String sql = "SELECT "+ "tb_factura.numero,"+ "tb_prestador.codigo
         * codigo_prestador,"+ "tb_tipoidentificacion.codigo tipoide,"+
         * "tb_paciente.numero_identificacion,"+
         * "tb_ripestancia.fecha_ingreso,"+
         * "tb_ripestancia.numero_autorizacion,"+ "tb_causa_externa.codigo
         * causaex,"+ "tb_ripestancia.coddx_ingreso,"+
         * "tb_ripestancia.coddx_salida,"+ "tb_ripestancia.coddx_rel1,"+
         * "tb_ripestancia.coddx_rel2,"+ "tb_ripestancia.coddx_rel3,"+
         * "tb_ripestancia.coddx_complicacion,"+ "tb_estadosalida.codigo
         * estado,"+ "tb_ripestancia.coddx_muerte,"+
         * "tb_ripestancia.fecha_salida," +"tb_viaingreso.codigo via"+ " FROM "+
         * " tb_ripestancia,"+ " tb_factura,"+ " tb_prestador,"+ "
         * tb_paciente,"+ " tb_tipoidentificacion,"+ " tb_causa_externa,"+ "
         * tb_destinosalida,"+ " tb_estadosalida," + "tb_viaingreso"+ " WHERE "+
         * "tb_ripestancia.id_factura = tb_factura.id AND "+
         * "tb_ripestancia.id_causaexterna = tb_causa_externa.id AND "+
         * "tb_ripestancia.id_destino = tb_destinosalida.id AND "+
         * "tb_ripestancia.id_estadosalida = tb_estadosalida.id AND "+
         * "tb_ripestancia.id_viaingreso = tb_viaingreso.id AND "+
         * "tb_factura.id_prestador = tb_prestador.id AND "+
         * "tb_factura.id_paciente = tb_paciente.id AND "+
         * "tb_paciente.id_tipo_identificacion = tb_tipoidentificacion.id" +condicion;
         */

        String sql = "SELECT "
                + " tb_factura.numero, "
                + " tb_sede.codigo_prestador, "
                + " tb_tipoidentificacion.codigo tipoide, "
                + " tb_paciente.numero_identificacion, "
                + " tb_viaingreso.codigo via, "
                + " to_char(tb_ripsah.fecha_ingreso,'dd/mm/yyyy HH24:MI') fecha_ingreso, "
                + " tb_ripsah.numero_orden, "
                + " tb_causa_externa.codigo causaex, "
                + " tb_ripsah.dxprincipal_ing, "
                + " tb_ripsah.dxprincipal_egr, "
                + " tb_ripsah.dxrelacionado_egr_uno, "
                + " tb_ripsah.dxrelacionado_egr_dos, "
                + " tb_ripsah.dxrelacionado_egr_tres, "
                + " tb_ripsah.dxcomplicacion_egr, "
                + " tb_estadosalida.codigo estado, "
                + " tb_ripsah.dxmuerte_egr, "
                + " to_char(tb_ripsah.fecha_egr,'dd/mm/yyyy HH24:MI') fecha_egr "
                + " FROM "
                + " tb_ripsah "
                + " inner join tb_factura on (tb_ripsah.id_factura = tb_factura.id) "
                + " inner join tb_sede on (tb_factura.id_sede = tb_sede.id) "
                + " inner join tb_causa_externa on( tb_ripsah.id_causaexterna = tb_causa_externa.id) "
                + " inner join tb_estadosalida on (tb_ripsah.id_estadosalida_egr = tb_estadosalida.id) "
                + " inner join tb_viaingreso on (tb_ripsah.id_viaingreso = tb_viaingreso.id) "
                + " inner join tb_paciente on (tb_ripsah.id_paciente = tb_paciente.id) "
                + " inner join tb_tipoidentificacion on (tb_paciente.id_tipo_identificacion = tb_tipoidentificacion.id) " + condicion;

        System.out.println("lista AH: " + sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    PlanoAHVO planoAHVO = new PlanoAHVO();
                    planoAHVO.setTipoIde(res.getString("tipoide"));
                    planoAHVO.setNumIde(res.getString("numero_identificacion"));
                    planoAHVO.setId_factura(res.getString("numero"));
                    planoAHVO.setCodPrestador(res.getString("codigo_prestador"));
                    planoAHVO.setViaIngreso(res.getString("via"));
                    String[] fecHora = res.getString("fecha_ingreso").split(" ");
                    planoAHVO.setFechaIngreso(fecHora[0]);
                    planoAHVO.setHoraIngreso(fecHora[1]);
                    planoAHVO.setNumOrden(res.getString("numero_orden"));
                    planoAHVO.setCausaEx(res.getString("causaex"));
                    planoAHVO.setDxIngreso(res.getString("dxprincipal_ing"));
                    planoAHVO.setDxEgreso(res.getString("dxprincipal_egr"));
                    planoAHVO.setDxEgreso1(res.getString("dxrelacionado_egr_uno"));
                    planoAHVO.setDxEgreso2(res.getString("dxrelacionado_egr_dos"));
                    planoAHVO.setDxEgreso3(res.getString("dxrelacionado_egr_tres"));
                    planoAHVO.setDxComplic(res.getString("dxcomplicacion_egr"));
                    planoAHVO.setEstadoSalida(res.getString("estado"));
                    planoAHVO.setDxMuerte(res.getString("dxmuerte_egr"));
                    String[] fecHoraSal = res.getString("fecha_egr").split(" ");
                    planoAHVO.setFechaSalida(fecHoraSal[0]);
                    planoAHVO.setHoraSalida(fecHoraSal[1]);
                    listaPlanoAH.add(planoAHVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }
        return listaPlanoAH;
    }

    @Override
    public List<PlanoATVO> generarPlanoOtroServicios(int caso, int idsede, int identidad, int idcontrato, String factura, String fecini, String fecfin) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sqlAdi = "";
        String condicion = "";

        sqlAdi = getSql(caso, idsede, identidad, idcontrato, factura);

        condicion = " where tb_factura.fecha between '" + fecini + "' AND '" + fecfin + "' " + sqlAdi;
        List<PlanoATVO> listaPlanoAT = new ArrayList<PlanoATVO>();

        String sql = "SELECT "
                + " tb_factura.numero, "
                + " tb_sede.codigo_prestador, "
                + " tb_tipoidentificacion.codigo tipoide, "
                + " tb_paciente.numero_identificacion, "
                + " tb_tiposervicio.codigo tiposer, "
                + " tb_actividad.codigo actividad, "
                + " tb_actividad.descripcion desactividad, "
                + " tb_ripsat.cantidad, "
                + " tb_ripsat.valor_unitario, "
                + " tb_ripsat.valor_total "
                + "  FROM "
                + " tb_ripsat "
                + " inner join tb_factura on (tb_ripsat.id_factura = tb_factura.id) "
                + " inner join tb_sede on (tb_factura.id_sede = tb_sede.id) "
                + " inner join tb_actividad on (tb_ripsat.id_actividad = tb_actividad.id) "
                + " inner join tb_tiposervicio on (tb_actividad.id_tiposervicio = tb_tiposervicio.id) "
                + " inner join tb_paciente on (tb_ripsat.id_paciente = tb_paciente.id) "
                + " inner join tb_tipoidentificacion on (tb_paciente.id_tipo_identificacion = tb_tipoidentificacion.id) " + condicion;

        System.out.println("lista AT: " + sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    PlanoATVO planoATVO = new PlanoATVO();
                    planoATVO.setTipoIde(res.getString("tipoide"));
                    planoATVO.setNumIde(res.getString("numero_identificacion"));
                    planoATVO.setNumFactura(res.getString("numero"));
                    planoATVO.setCodPrestador(res.getString("codigo_prestador"));
                    planoATVO.setNumOrden("");//AVERIGUAR DE DONDE SALE
                    planoATVO.setTipoServicio(res.getString("tiposer"));
                    planoATVO.setCodServicio(res.getString("actividad"));
                    planoATVO.setNomServicio(res.getString("desactividad"));
                    planoATVO.setCantidad(res.getString("cantidad"));
                    planoATVO.setVrUnitario(res.getString("valor_unitario"));
                    planoATVO.setVrTotal(res.getString("valor_total"));
                    listaPlanoAT.add(planoATVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }

        return listaPlanoAT;
    }

    @Override
    public List<PlanoAMVO> generarPlanoMedicamentos(int caso, int idsede, int identidad, int idcontrato, String factura, String fecini, String fecfin) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sqlAdi = "";
        String condicion = "";

        sqlAdi = getSql(caso, idsede, identidad, idcontrato, factura);

        condicion = " where tb_factura.fecha between '" + fecini + "' AND '" + fecfin + "' " + sqlAdi;
        List<PlanoAMVO> listaPlanoAM = new ArrayList<PlanoAMVO>();

        String sql = "SELECT "
                + " tb_factura.numero, "
                + " tb_sede.codigo_prestador, "
                + " tb_tipoidentificacion.codigo tipoide, "
                + " tb_paciente.numero_identificacion, "
                + " tb_actividad.codigo actividad, "
                + " tb_ripsam.numero_orden, "
                + " tb_actividad.es_pos espos, "
                + " tb_insumo.nombre_generico, "
                + " tb_formafarmaceutica.codigo formafarm, "
                + " tb_insumo.concentracion, "
                + " tb_unidadmedida.codigo undmedida, "
                + " tb_ripsam.numero_unidades, "
                + " tb_ripsam.valor_unitario, "
                + " tb_ripsam.valor_total "
                + " FROM "
                + " tb_ripsam "
                + " inner join tb_factura on (tb_ripsam.id_factura = tb_factura.id) "
                + " inner join tb_sede on (tb_factura.id_sede = tb_sede.id) "
                + " inner join tb_paciente on( tb_ripsam.id_paciente = tb_paciente.id) "
                + " inner join tb_tipoidentificacion on (tb_paciente.id_tipo_identificacion = tb_tipoidentificacion.id) "
                + " inner join tb_actividad on (tb_ripsam.id_actividad = tb_actividad.id) "
                + " inner join tb_insumo on (tb_ripsam.id_actividad =  tb_insumo.id_actividad) "
                + " inner join tb_formafarmaceutica on (tb_insumo.id_formafarmaceutica = tb_formafarmaceutica.id) "
                + " inner join tb_unidadmedida on (tb_insumo.id_unidadmedida = tb_unidadmedida.id) " + condicion;

        System.out.println("lista AM: " + sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    PlanoAMVO planoAMVO = new PlanoAMVO();
                    planoAMVO.setTipoIde(res.getString("tipoide"));
                    planoAMVO.setNumIde(res.getString("numero_identificacion"));
                    planoAMVO.setNumFactura(res.getString("numero"));
                    planoAMVO.setCodPrestador(res.getString("codigo_prestador"));
                    planoAMVO.setNumOrden(res.getString("numero_orden"));
                    planoAMVO.setCodMed(res.getString("actividad"));
                    planoAMVO.setTipoMed(res.getString("espos"));
                    planoAMVO.setNomMed(res.getString("nombre_generico"));
                    planoAMVO.setFormaFarm(res.getString("formafarm"));
                    planoAMVO.setConcMed(res.getString("concentracion"));
                    planoAMVO.setUndMedida(res.getString("undmedida"));
                    planoAMVO.setCantidad(res.getString("numero_unidades"));
                    planoAMVO.setVrUnitario(res.getString("valor_unitario"));
                    planoAMVO.setVrTotal(res.getString("valor_total"));
                    listaPlanoAM.add(planoAMVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }

        return listaPlanoAM;
    }

    @Override
    public List<PlanoANVO> generarPlanoRecienNacidos(int caso, int idsede, int identidad, int idcontrato, String factura, String fecini, String fecfin) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sqlAdi = "";
        String condicion = "";

        sqlAdi = getSql(caso, idsede, identidad, idcontrato, factura);

        condicion = " where tb_factura.fecha between '" + fecini + "' AND '" + fecfin + "' " + sqlAdi;

        List<PlanoANVO> listaPlanoAN = new ArrayList<PlanoANVO>();

        String sql = "SELECT "
                + " tb_factura.numero, "
                + " tb_sede.codigo_prestador, "
                + " tb_tipoidentificacion.codigo tipoide, "
                + " tb_paciente.numero_identificacion, "
                + " to_char(tb_ripsan.fecha_nacimiento,'dd/mm/yyyy HH24:MI') fecha_nacimiento, "
                + " tb_ripsan.edad_gestacion, "
                + " tb_ripsan.control_prenatal, "
                + " tb_sexo.codigo codigosex, "
                + " tb_ripsan.peso, "
                + " tb_ripsan.coddx_rn, "
                + " tb_ripsan.coddx_muerte, "
                + " to_char(tb_ripsan.fecha_muerte,'dd/mm/yyyy HH24:MI') fecha_muerte, "
                + " tb_ripsan.nombre_completo "
                + " FROM "
                + " tb_ripsan "
                + " inner join tb_factura on (tb_ripsan.id_factura = tb_factura.id) "
                + " inner join tb_sede on (tb_factura.id_sede = tb_sede.id) "
                + " inner join tb_sexo on (tb_ripsan.id_sexo = tb_sexo.id) "
                + " inner join tb_paciente on (tb_ripsan.id_paciente = tb_paciente.id) "
                + " inner join tb_tipoidentificacion on (tb_paciente.id_tipo_identificacion = tb_tipoidentificacion.id) " + condicion;

        System.out.println("lista AN: " + sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    PlanoANVO planoANVO = new PlanoANVO();
                    planoANVO.setNumFactura(res.getString("numero"));
                    planoANVO.setCodPrestador(res.getString("codigo_prestador"));
                    planoANVO.setTipoIde(res.getString("tipoide"));
                    planoANVO.setNumIde(res.getString("numero_identificacion"));
                    String[] fecHoraNac = res.getString("fecha_nacimiento").split(" ");
                    planoANVO.setFechaNacimiento(fecHoraNac[0]);
                    planoANVO.setHoraNacimiento(fecHoraNac[1]);
                    planoANVO.setEdadGestacion(res.getString("edad_gestacion"));
                    planoANVO.setControlPrenatal(res.getString("control_prenatal"));
                    planoANVO.setSexo(res.getString("codigosex"));
                    planoANVO.setPeso(res.getString("peso"));
                    planoANVO.setDxRn(res.getString("coddx_rn"));
                    planoANVO.setDxMuerte(res.getString("coddx_muerte"));

                    if (res.getString("fecha_muerte") != null) {

                        String[] fecHoraMue = res.getString("fecha_muerte").split(" ");

                        planoANVO.setFechaMuerte(fecHoraMue[0]);
                        planoANVO.setHoraMuerte(fecHoraMue[1]);

                    } else {

                        planoANVO.setFechaMuerte("");
                        planoANVO.setHoraMuerte("");

                    }

                    listaPlanoAN.add(planoANVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }

        return listaPlanoAN;
    }
}//fin de la clase